<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Aluno
 *
 * @author alexandre
 */
class Aluno {

    private $nome;
    private $dataNascimento;
    private $cpf;
    private $identidade;
    private $matricula;
    private $cursoCod;
    private $periodo;
    private $foto;
    private $notificacaoMatricula;
    private $email;
    private $telefone;
    private $celular;
    public $hash = "";
    public $erro = "";
    public $statusPagamento = "";
    public $statusDocumento = "";
    public $local = null;

    function __construct($cpf = null) {
        if (!is_null($cpf)) {
            $this->loadData($cpf);
        }
    }

    public function apagar() {
        try {
            include_once 'BaseDados.php';
            $db = new BaseDados("escrita");
            $objDb = $db->getObjDb();
            $stmt = $objDb->stmt_init();
            if ($stmt->prepare("DELETE FROM `dceufg_documento`.`Aluno`
                            WHERE `cpf` LIKE ?")) {
                $stmt->bind_param('s', $this->cpf);
                $stmt->execute();
                $stmt->close();
                $diretorio = "./../arquivos/";
                $foto = $diretorio . $this->foto;
                if (is_file($foto)) {
                    unlink($foto);
                }
                $notificacao = $diretorio . $this->notificacaoMatricula;
                if (is_file($notificacao)) {
                    unlink($notificacao);
                }
                return "<h2>Operação cancelada!</h2>";
            }
        } catch (Exception $e) {
            return "Falha: , " . $e->getMessage() . ", \n";
        }
        return "<h2>Falha ao cancelar operação!</h2>";
    }

    public function confirmar() {
        if (!$this->validaEmail($this->getEmail())) {
            $this->erro .= "E-mail inválido!<br/>";
            return false;
        } else {
            try {
                include_once 'BaseDados.php';
                $db = new BaseDados("escrita");
                $objDb = $db->getObjDb();
                $stmt = $objDb->stmt_init();
                if ($stmt->prepare("UPDATE `dceufg_documento`.`Aluno`
                    SET
                    `statusDocumento` = 'CONFIRMANDO PAGAMENTO E IDENTIDADE',
                    `Aluno`.`idLocal` = ?
                    WHERE `cpf` LIKE ?")) {
                    $stmt->bind_param('is', $this->local, $this->cpf);
                    $stmt->execute();
                    $stmt->close();
                    return TRUE;
                }
            } catch (Exception $e) {
                $this->erro = "Falha: , " . $e->getMessage() . ", \n";
                return false;
            }
        }
        return false;
    }

    public function aprovarPagamento($usuario_id) {
        include_once 'BaseDados.php';
        $db = new BaseDados("escrita");
        $objDb = $db->getObjDb();
        $stmt = $objDb->stmt_init();
        if ($stmt->prepare("INSERT INTO `dceufg_documento`.`Pagamentos`
            (`cpf`,`usuario_id`)
            VALUES(?,?
            )")) {
            $stmt->bind_param('si', $this->cpf, $usuario_id);
            $stmt->execute();
            $stmt->close();
            $stmt = $objDb->stmt_init();
            if ($stmt->prepare("UPDATE `dceufg_documento`.`Aluno`
                SET
                `statusPagamento` = 'PAGO',
                `statusDocumento` = 'REGULAR'
                WHERE `cpf` = ?")) {
                $stmt->bind_param('s', $this->cpf);
                $stmt->execute();
                $stmt->close();
                $nome = trim(strtoupper($this->nome));
                $mensagem = "<html><body>
                    Prezado(a) $nome,<br/><br/>Informamos que o seu pagamento no Sistema de Carteiras de Estudante do DCE-UFG foi efetuado com sucesso!<br/><br/>
                    Agradecemos pela sua compreensão se tivermos demorado para lhe enviar esse e-mail.<br/><br/>
                    Obrigado por contribuir para o fortalecimento do Movimento Estudantil.<br/><br/>
                    Atenciosamente,<br/>Gestão Ouse Falar! - DCE-UFG<br/>
                    <a href='http://dceufg.org/'>Site Oficial</a><br/>
                    E-mail: contato@dceufg.org<br/>
                    Telefone: +55 (62) 3521-1255
                </body></html>";
                $assunto = "Pagamento no Sistema de Carteiras de Estudante Confirmado";
                $this->enviarMensagem($assunto, $mensagem);
            } else {
                $this->erro .= "Falha ao alterar status dos alunos";
                return false;
            }
        } else {
            $this->erro .= "Falha ao inserir pagamento no registro";
            return false;
        }
        return true;
    }

    public function listarDevedores() {
        include_once 'BaseDados.php';
        $db = new BaseDados("consulta");
        $objDb = $db->getObjDb();
        $stmt = $objDb->stmt_init();
        if ($stmt->prepare("SELECT * FROM `dceufg_documento`.`DEVENDO`")) {
            $stmt->execute();
            $stmt->bind_result($CPF, $ALUNO, $CURSO, $LOCAL, $DATA);
            $return = array();
            while ($stmt->fetch()) {
                $return["CPF"][] = $CPF;
                $return["ALUNO"][] = $ALUNO;
                $return["CURSO"][] = $CURSO;
                $return["LOCAL"][] = $LOCAL;
                $return["DATA"][] = $DATA;
            }
            $stmt->close();
            return $return;
        } else {
            return null;
        }
    }

    public function jaCadastrado($cpf) {
        try {
            include_once 'BaseDados.php';
            $db = new BaseDados("consulta");
            $objDb = $db->getObjDb();
            $stmt = $objDb->stmt_init();
            if ($stmt->prepare("SELECT
                        `Aluno`.`cpf`
                        FROM `dceufg_documento`.`Aluno`
                        WHERE `Aluno`.`cpf` LIKE ?")) {
                $stmt->bind_param('s', $cpf);
                $stmt->execute();
                $stmt->bind_result($cpf2);
                $stmt->fetch();
                $stmt->close();
                if ($cpf2 == $cpf) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } catch (Exception $e) {
            return "Falha: , " . $e->getMessage() . ", \n";
        }
    }

    private function loadData($cpf) {
        if (is_null($cpf)) {
            $cpf = $this->getCpf();
        } else {
            $cpf = $this->trataCPF($cpf);
        }
        try {
            include_once 'BaseDados.php';
            $db = new BaseDados("consulta");
            $objDb = $db->getObjDb();
            $stmt = $objDb->stmt_init();
            if ($stmt->prepare("SELECT
                        `Aluno`.`cpf`,
                        `Aluno`.`nome`,
                        `Aluno`.`dataNascimento`,
                        `Aluno`.`identidade`,
                        `Aluno`.`matricula`,
                        `Aluno`.`cursoCod`,
                        `Aluno`.`periodo`,
                        `Aluno`.`email`,
                        `Aluno`.`telefone`,
                        `Aluno`.`celular`,
                        `Aluno`.`foto`,
                        `Aluno`.`notificacaoMatricula`,
                        `Aluno`.`hash`,
                        `Aluno`.`statusPagamento`,
                        `Aluno`.`statusDocumento`
                        FROM `dceufg_documento`.`Aluno`
                        WHERE `Aluno`.`cpf` = ?")) {
                $stmt->bind_param('s', $cpf);
                $stmt->execute();
                $stmt->bind_result($cpf2, $nome, $dataNascimento, $identidade, $matricula, $cursoCod, $periodo, $email, $telefone, $celular, $foto, $notificacaoMatricula, $hash, $statusPagamento, $statusDocumento);
                $stmt->fetch();
                $stmt->close();
                if ($cpf2 == $cpf) {
                    $this->setCpf($cpf2);
                    $this->setNome($nome);
                    $this->setDataNascimento($dataNascimento);
                    $this->setIdentidade($identidade);
                    $this->setMatricula($matricula);
                    $this->setCursoCod($cursoCod);
                    $this->setPeriodo($periodo);
                    $this->setEmail($email);
                    $this->setTelefone($telefone);
                    $this->setCelular($celular);
                    $this->setFoto($foto);
                    $this->setNotificacaoMatricula($notificacaoMatricula);
                    $this->hash = $hash;
                    $this->statusPagamento = $statusPagamento;
                    $this->statusDocumento = $statusDocumento;
                    return true;
                }
                $this->erro .= "CPF não bate com o retornado pela base de dados!";
                return false;
            }
        } catch (Exception $e) {
            return "Falha: , " . $e->getMessage() . ", \n";
        }
    }

    public function inserirAluno() {
        if ($this->jaCadastrado($this->getCpf())) {
            return "CPF já cadastrado!<br/>Entre em contato via e-mail informando o seu CPF juntamente com código de verificação enviado para seu e-mail para que seu cadastro seja desbloqueado. E-mail: contato@dceufg.org";
        }
        try {
            require_once 'BaseDados.php';
            $db = new BaseDados("escrita");
            $objDb = $db->getObjDb();
            $stmt = $objDb->stmt_init();
            if ($stmt->prepare("INSERT INTO `dceufg_documento`.`Aluno`
                    (`cpf`,
                    `nome`,
                    `dataNascimento`,
                    `identidade`,
                    `matricula`,
                    `cursoCod`,
                    `periodo`,
                    `email`,
                    `telefone`,
                    `celular`,
                    `foto`,
                    `notificacaoMatricula`,
                    `hash`)
                    VALUES
                    (
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?
                    )")) {
                $stmt->bind_param('sssssiissssss', $this->cpf, $this->nome, $this->dataNascimento, $this->identidade, $this->matricula, $this->cursoCod, $this->periodo, $this->email, $this->telefone, $this->celular, $this->foto, $this->notificacaoMatricula, $this->hash);
                $stmt->execute();
                $stmt->close();
                return 1;
            } else {
                return "Falha ao preparar statement, verifique se todos os dados foram informados corretamente";
            }
        } catch (Exception $e) {
            return "Falha: , " . $e->getMessage() . ", \n";
            exit();
        }
    }

    private function trataCPF($cpf) {
        return $cpf;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getDataNascimento() {
        return $this->dataNascimento;
    }

    public function setDataNascimento($dataNascimento) {
        $this->dataNascimento = $dataNascimento;
    }

    public function getCpf() {
        return $this->cpf;
    }

    public function setCpf($cpf) {
        $this->cpf = $cpf;
    }

    public function getIdentidade() {
        return $this->identidade;
    }

    public function setIdentidade($identidade) {
        $this->identidade = $identidade;
    }

    public function getMatricula() {
        return $this->matricula;
    }

    public function setMatricula($matricula) {
        $this->matricula = $matricula;
    }

    public function getCursoCod() {
        return $this->cursoCod;
    }

    public function setCursoCod($cursoCod) {
        $this->cursoCod = $cursoCod;
    }

    public function getPeriodo() {
        return $this->periodo;
    }

    public function setPeriodo($periodo) {
        $this->periodo = $periodo;
    }

    public function getFoto() {
        return $this->foto;
    }

    public function setFoto($foto) {
        $this->foto = $foto;
    }

    public function getNotificacaoMatricula() {
        return $this->notificacaoMatricula;
    }

    public function setNotificacaoMatricula($notificacaoMatricula) {
        $this->notificacaoMatricula = $notificacaoMatricula;
    }

    public function getEmail() {
        return $this->email;
    }

    public function setEmail($email) {
        $this->email = $email;
    }

    public function getTelefone() {
        return $this->telefone;
    }

    public function setTelefone($telefone) {
        $this->telefone = $telefone;
    }

    public function getCelular() {
        return $this->celular;
    }

    public function setCelular($celular) {
        $this->celular = $celular;
    }

    public function enviarMensagem($assunto, $mensagem) {
        if ((isset($assunto)) && (isset($mensagem)) && (isset($this->email))) {
            if ($this->validaEmail($this->email)) {
                try {
                    $from = ("Diretorio Central dos Estudantes - UFG <contato@dceufg.org>");
                    $path = '/home/dceufg/php';
                    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
                    require_once 'Mail.php';
                    $destino = $this->email;
                    $cabecalhos['From'] = $from;
                    $cabecalhos['MIME-Version'] = '1.0';
                    $cabecalhos['Content-type'] = 'text/html';
                    $cabecalhos['charset='] = 'UTF-8';
                    $cabecalhos['To'] = $this->nome . ' <' . $this->email . '>';
                    $cabecalhos['Subject'] = $assunto;

                    $smtpP['host'] = 'ssl://mail.dceufg.org';
                    $smtpP['port'] = '465';
                    $smtpP['auth'] = 'PLAIN';
                    $smtpP['username'] = 'contato@dceufg.org';
                    $smtpP['password'] = '1xs5zkfd62';

                    $smtp = Mail::factory('smtp', $smtpP);

                    $mail = $smtp->send($destino, $cabecalhos, $mensagem);

                    if (PEAR::isError($mail)) {
                        return ("<p>" . $mail->getMessage() . "</p>");
                    } else {
                        return ("<p>E-mail encaminhado!<label style='color:red;'>Verifique se o mesmo não foi para a caixa de spam.</label></p>");
                    }
                } catch (Exception $e) {
                    return "Falha: , " . $e->getMessage() . ", \n";
                }
            } else {
                return "E-mail inválido! Não foi possível enviar a confirmação.";
            }
        }
        return "Parâmetros inválidos! Não foi possível enviar a confirmação.";
        ;
    }

    public function validaEmail($email) {
//        $conta = "^[a-zA-Z0-9\._-]+@";
//        $domino = "[a-zA-Z0-9\._-]+.";
//        $extensao = "([a-zA-Z]{2,4})$";
//
//        $pattern = $conta . $domino . $extensao;
//
//        if (ereg($pattern, $email))
//            return true;
//        else
//            return false;
        return true;
    }

    public function listaLocaisEntregaToArray() {
        try {
            include_once 'BaseDados.php';
            $db = new BaseDados("consulta");
            $objDb = $db->getObjDb();
            $stmt = $objDb->stmt_init();
            if ($stmt->prepare("SELECT
                                `LocalEntrega`.`idLocalEntrega`,
                                `LocalEntrega`.`endereco`
                                FROM `dceufg_documento`.`LocalEntrega`
                                ORDER BY `LocalEntrega`.`idLocalEntrega` ASC")) {
                $stmt->execute();
                $stmt->bind_result($idLocal, $local);
                $return = array();
                while ($stmt->fetch()) {
                    $return["IDLOCAL"][] = $idLocal;
                    $return["LOCAL"][] = utf8_encode($local);
                }
                $stmt->close();
                return $return;
            }
        } catch (Exception $e) {
            return "Falha: , " . $e->getMessage() . ", \n";
        }
    }

}

?>
